Freeze the update counter for unmapped windows
authorOwen W. Taylor <otaylor@fishsoup.net>
Thu, 4 Oct 2012 00:13:42 +0000 (20:13 -0400)
committerOwen W. Taylor <otaylor@fishsoup.net>
Thu, 14 Feb 2013 22:19:48 +0000 (17:19 -0500)
When a window is unmapped, freeze its frame clock. This avoids doing
unnecessary work, but also means that we won't block waiting for
_NET_WM_FRAME_DRAWN messages that will never be received since the
frame ended while the window was withdrawn.

https://bugzilla.gnome.org/show_bug.cgi?id=685460

gdk/x11/gdkdisplay-x11.c
gdk/x11/gdkwindow-x11.c

index 5afb11c417b34fea2818133122806ca98875daf7..4e28f74ec054adaf8feb080d466a507eac5656d8 100644 (file)
@@ -688,6 +688,9 @@ gdk_x11_display_translate_event (GdkEventTranslator *translator,
               gdk_frame_clock_thaw (gdk_window_get_frame_clock (event->any.window));
             }
 
+         if (toplevel)
+            gdk_window_freeze_toplevel_updates_libgtk_only (window);
+
           _gdk_x11_window_grab_check_unmap (window, xevent->xany.serial);
         }
 
@@ -708,6 +711,9 @@ gdk_x11_display_translate_event (GdkEventTranslator *translator,
            gdk_synthesize_window_state (window,
                                         GDK_WINDOW_STATE_ICONIFIED,
                                         0);
+
+         if (toplevel)
+           gdk_window_thaw_toplevel_updates_libgtk_only (window);
        }
 
       break;
index 99d2f7f659779a4eaf877c82939e811cb5e3d5b5..f6af492277755ec917f7d6225d1cebc8964ea685 100644 (file)
@@ -940,6 +940,9 @@ _gdk_x11_display_create_window_impl (GdkDisplay    *display,
                     G_CALLBACK (on_frame_clock_before_paint), window);
   g_signal_connect (clock, "after-paint",
                     G_CALLBACK (on_frame_clock_after_paint), window);
+
+  if (GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD)
+    gdk_window_freeze_toplevel_updates_libgtk_only (window);
 }
 
 static GdkEventMask